angular.module('myApp')
    .directive('defLaydate', function() {
        return {
            require: '?ngModel',
            restrict: 'A',
            scope: {
                ngModel: '=',
                maxDate:'@',
                minDate:'@'
            },
            link: function(scope, element, attr, ngModel) {
                var _config={};

                // 初始化参数
                _config = {
                    elem: '#' + attr.id,
                    /*format: attr.format != undefined && attr.format != '' ? attr.format : 'yyyy-MM-dd',*/
                    max:attr.hasOwnProperty('maxDate')?attr.maxDate:'9999-12-30',
                    min:attr.hasOwnProperty('minDate')?attr.minDate:'1000-1-1' ,
                    type:attr.hasOwnProperty('ldtype')?attr.ldtype:'datetime',
                    range:attr.hasOwnProperty('range')?attr.range:false,
                    choose: function(data) {
                        scope.$apply(setViewValue);
                    },
                    clear:function(){
                        ngModel.$setViewValue(null);
                    },
                    done:function (value,date,endDate) {
                        element.val(value);
                        scope.$apply(setViewValue);
                    }
                };
                // 初始化
                laydate.render(_config);
                // 监听日期最大值
                if(attr.hasOwnProperty('maxDate')){
                    attr.$observe('maxDate', function (val) {
                        _config.max = val;
                    })
                }
                // 监听日期最小值
                if(attr.hasOwnProperty('minDate')){
                    attr.$observe('minDate', function (val) {
                        _config.min = val;
                    })
                }


                // 模型值同步到视图上
                ngModel.$render = function() {
                    element.val(ngModel.$viewValue || '');
                };

                // 监听元素上的事件
                // element.on('blur keyup change', function() {
                //     console.log('-----on ---- ');
                //     scope.$apply(setViewValue);
                // });

                setViewValue();

                // 更新模型上的视图值
                function setViewValue() {
                    var val = element.val();
                    ngModel.$setViewValue(val);
                }
            }
        }
    })